package kleurapplet;
import java.awt.Color;
import java.util.Observable;
import kleurapplet.grnuminput.*;

public class Kleur extends Observable implements NumberListener
{
	// Variables 	
	private int roodval;
	private int groenval;
	private int blauwval;
	private float[] hsbvalues;
	//rgbChanged
	//hsbChanged

	// Constants
	private static Color echtRood = new Color(255, 0, 0);
	private static Color echtGroen = new Color(0, 255, 0);
	private static Color echtBlauw = new Color(0, 0, 255);
	
	public Kleur()
	{
		roodval = 127;
		groenval = 127;
		blauwval = 127;
		adjustHSBValues();
		//(del)hsbvalues = Color.RGBtoHSB(roodval, groenval, blauwval, hsbvalues);
	}
	
	/**
	 * Vertaalt een RGB-component in een tweecijferige hexamdecimale waarde.
	 */
	public static String translateRGBtoHex(int RGBint)//translateRGB2hex(int RGBint, return RGBhex
	{	
		String hex = Integer.toHexString(RGBint);
		if ( hex.length() == 1 )			// add zero voor eencijferige string
		{	
			hex = "0".concat(hex);
		}
		return hex;
	}
	
	/**
	 * Bij verandering van RGB moet HSB worden aangepast
	 */
		private void adjustHSBValues()
		{	
			hsbvalues = Color.RGBtoHSB(roodval, groenval, blauwval, hsbvalues);
			setChanged();
			notifyObservers();
		}
		
	/**
	 * Bij verandering van HSB moet RGB worden aangepast
	 */
		private void adjustRGBValues()
		{	Color c = Color.getHSBColor(hsbvalues[0], hsbvalues[1], hsbvalues[2]);
			roodval = c.getRed();
			groenval = c.getGreen();
			blauwval = c.getBlue();
			setChanged();
			notifyObservers();
		}
	
		// Event handler	
		public void numberChanged(String naam, double v)
		{	if ( naam.equals("Rood") )
			{	roodval = (int)v;		// harde cast!! v loopt van 0 tot 255 met 0 decimalen!
				adjustHSBValues();
			} else if ( naam.equals("Groen") )
			{	groenval = (int)v;	
				adjustHSBValues();
			} else if ( naam.equals("Blauw") )
			{	blauwval = (int)v;
				adjustHSBValues();
			} else if ( naam.equals("Tint") )
			{	hsbvalues[0] = (float)v;	// harde cast!! v loopt van 0 tot 1 met 3 decimalen!
				adjustRGBValues();
			} else if ( naam.equals("Verzadiging") )
			{	hsbvalues[1] = (float)v;
				adjustRGBValues();
			} else 	// must be "Helderheid"
			{	hsbvalues[2] = (float)v;
				adjustRGBValues();
			}
		}

		public int getRoodval() {
			return roodval;
		}

		public int getGroenval() {
			return groenval;
		}

		public int getBlauwval() {
			return blauwval;
		}

		public static Color getEchtRood() {
			return echtRood;
		}

		public static Color getEchtGroen() {
			return echtGroen;
		}

		public static Color getEchtBlauw() {
			return echtBlauw;
		}

		public float[] getHsbvalues() {
			return hsbvalues;
		}
		
}
